<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>封装字典</title>
  </head>
  <body>
    <script type="text/javascript">
      /* 字典常见的操作
      set(key,value)：向字典中添加新元素。
      remove(key)：通过使用键值来从字典中移除键值对应的数据值。
      has(key)：如果某个键值存在于这个字典中，则返回true，反之则返回false。
      get(key)：通过键值查找特定的数值并返回。
      clear()：将这个字典中的所有元素全部删除。
      size()：返回字典所包含元素的数量。与数组的length属性类似。
      keys()：将字典所包含的所有键名以数组形式返回。
      values()：将字典所包含的所有数值以数组形式返回。 */


      // 创建字典的构造函数
      function Dictionay() {
        // 字典属性
        this.items = {}

        // 字典操作方法
        // 在字典中添加键值对
        Dictionay.prototype.set = function(key, value) {
          this.items[key] = value
        }

        // 判断字典中是否有某个key
        Dictionay.prototype.has = function(key) {
          return this.items.hasOwnProperty(key)
        }

        // 从字典中移除元素
        Dictionay.prototype.remove = function(key) {
          // 1.判断字典中是否有这个key
          if (!this.has(key)) return false

          // 2.从字典中删除key
          delete this.items[key]
          return true
        }

        // 根据key去获取value
        Dictionay.prototype.get = function(key) {
          return this.has(key) ? this.items[key] : undefined
        }

        // 获取所有的keys
        Dictionay.prototype.keys = function() {
          return Object.keys(this.items)
        }

        // 获取所有的value
        Dictionay.prototype.values = function() {
          return Object.values(this.items)
        }

        // size方法
        Dictionay.prototype.size = function() {
          return this.keys().length
        }

        // clear方法
        Dictionay.prototype.clear = function() {
          this.items = {}
        }
      }


      // 创建字典对象
      var dict = new Dictionay()

      // 在字典中添加元素
      dict.set("age", 18)
      dict.set("name", "Coderwhy")
      dict.set("height", 1.88)
      dict.set("address", "广州市")

      // 获取字典的信息
      alert(dict.keys()) // age,name,height,address
      alert(dict.values()) // 18,Coderwhy,1.88,广州市
      alert(dict.size()) // 4
      alert(dict.get("name")) // Coderwhy

      // 字典的删除方法
      dict.remove("height")
      alert(dict.keys()) // age,name,address

      // 清空字典
      dict.clear()
    </script>
  </body>
</html>
